export interface ExposedBinderInstance {
  targetRef: HTMLElement | null
}

export interface BinderInstance extends ExposedBinderInstance {
  syncTargetWithParent: boolean
  syncTarget: boolean
  setTargetRef: (el: HTMLElement | null) => void
  addScrollListener: (listener: () => void) => void
  removeScrollListener: (listener: () => void) => void
  addResizeListener: (listener: () => void) => void
  removeResizeListener: (listener: () => void) => void
}

export type Placement =
  | 'top'
  | 'bottom'
  | 'left'
  | 'right'
  | 'top-start'
  | 'top-end'
  | 'left-start'
  | 'left-end'
  | 'right-start'
  | 'right-end'
  | 'bottom-start'
  | 'bottom-end'

export type NonCenterPlacement =
  | 'top-start'
  | 'top-end'
  | 'left-start'
  | 'left-end'
  | 'right-start'
  | 'right-end'
  | 'bottom-start'
  | 'bottom-end'

export interface Rect {
  left: number
  right: number
  top: number
  bottom: number
  width: number
  height: number
}

export type Align = 'start' | 'end' | 'center'

export type Position = 'left' | 'right' | 'top' | 'bottom'

export type TransformOrigin =
  | 'top left'
  | 'top center'
  | 'top right'
  | 'bottom left'
  | 'bottom center'
  | 'bottom right'
  | 'top left'
  | 'center left'
  | 'bottom left'
  | 'top right'
  | 'center right'
  | 'bottom right'

export type FlipLevel = 1 | 2
